/**
 * 分类模块服务文件
 */

const db = require('../db/classify');

/**
 * 添加
 * @param {*} ctx 
 */
const add = async ctx => {
    try {
        const { body } = ctx.request;
        const { name } = body;
        const result = await db.exists(name);
        if (result) {
            return ctx.body = {
                code: 0,
                msg: '已存在相同的分类名称'
            }
        }
        await db.add(body);
        ctx.body = {
            code: 1,
            msg: '分类添加成功'
        }
    } catch (error) {
        ctx.app.emit('error', error);
        ctx.body = {
            code: 0,
            msg: '分类添加失败'
        }
    }
}

/**
 * 修改
 * @param {*} ctx 
 */
const update = async ctx => {
    try {
        const { body } = ctx.request;
        const { name, id, pid } = body;
        if (id == pid) {
            return ctx.body = {
                code: 0,
                msg: '不能添加自己为父菜单'
            }
        }
        if (await db.exists(name, id)) {
            return ctx.body = {
                code: 0,
                msg: '已存在相同的分类名称'
            }
        }
        if (pid > 0) {
            if (await db.existChildren(id)) {
                return ctx.body = {
                    code: 0,
                    msg: '此分类下还存在子分类，请先移除后再处理'
                }
            }
        }
        await db.update(body);
        ctx.body = {
            code: 1,
            msg: '分类修改成功'
        }
    } catch (error) {
        ctx.app.emit('error', error);
        ctx.body = {
            code: 0,
            msg: '分类修改失败'
        }
    }
}

/**
 * 删除
 * @param {*} ctx 
 */
const deleteClass = async ctx => {
    try {
        const { id } = ctx.request.params;
        await db.deleteClass(id);
        ctx.body = {
            code: 1,
            msg: '分类删除成功'
        }
    } catch (error) {
        ctx.app.emit('error', error);
        ctx.body = {
            code: 0,
            msg: '分类删除失败'
        }
    }
}

/**
 * 获取
 * @param {*} ctx 
 */
const getAll = async ctx => {
    try {
        const data = await db.getAll();
        ctx.body = {
            code: 1,
            data
        }
    } catch (error) {
        ctx.app.emit('error', error);
        ctx.body = {
            code: 0,
            msg: '分类获取失败'
        }
    }
}

module.exports = {
    add,
    update,
    getAll,
    deleteClass
}